package cn.touna.jss.modules.third.zxt.util;

import cn.touna.jss.common.properties.disconf.ZengxintongProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

/**
 * \* User: MeiZhongHao
 * \* Date: 2018-05-07
 * \* Time: 11:52
 * \* Description:
 * \
 */
@Component
public class AESUtil {

    private static final String AES = "AES";

//    private static final String CRYPT_KEY = "YUUAtestYUUAtest";// 加密

    @Autowired
    private ZengxintongProperties zengxintongProperties;
    /**
     * 加密
     * @param src
     * @param key
     * @return
     * @throws Exception
     */
    public static byte[] encrypt(byte[]src,String key)throws Exception{
        Cipher cipher = Cipher.getInstance(AES);
        SecretKeySpec secretkey = new SecretKeySpec(key.getBytes(),AES);
        cipher.init(Cipher.ENCRYPT_MODE,secretkey); // 设置密钥和加密形式
        return cipher.doFinal(src);
    }

    /**
     * 二进制转十六进制字符串
     * @param b
     * @return
     */
    public static String byte2hex(byte[] b){
        String hs = "";
        String stmp = "";
        for (int n= 0;n<b.length;n++){
            stmp = Integer.toHexString(b[n]&0XFF);
            if (stmp.length()==1)
                hs = hs+"0"+stmp;
            else
                hs = hs+stmp;
        }
        return hs.toUpperCase();
    }

    public static byte[] hex2byte(byte[] b){
        if (b.length%2!=0)
            throw new IllegalArgumentException("长度不是偶数");
        byte[]b2 = new byte[b.length/2];
        for (int n=0;n<b.length;n+=2){
            String item = new String(b,n,2);
            b2[n/2] = (byte) Integer.parseInt(item,16);
        }
        return b2;
    }

    /**
     * 加密
     * @param data
     * @return
     */
    public String encrypt(String data){
        try {
            return byte2hex(encrypt(data.getBytes(),zengxintongProperties.getPublicKey()));
        }catch (Exception e){
        }
        return null;
    }

//    public final static String encrypt(String data){
//        try {
//            return byte2hex(encrypt(data.getBytes(),CRYPT_KEY));
//        }catch (Exception e){
//        }
//        return null;
//    }
    
//    public static void main(String[] args){
//        String params = encrypt("{\"id_no\"\"12022219990101925x\",\"protocol_data_type_name\":[\"shenFenHeYan\"],\"name\":\"张三\"}"); // 加密参数
//        String pswEncrypt = encrypt("123456"); // 加密密码
//        System.out.println(params);
//        System.out.println(pswEncrypt);
//    }
}


